#pragma once
#ifndef ATOM_H_
#define ATOM_H_
#include <vector>
#include <string>

// Atom class
class Atom
{
public:
    Atom()
    {
        // 3-D (x,y,z) vector
        for (size_t i = 0; i < 3; i++)
        {
            veloc_.push_back(0.0);
            coord_.push_back(0.0);
            force_.push_back(0.0);
        }
        mass_ = 0.0;
        name_ = "xx";
        charge_ = 0.0;
    }
    ~Atom() {}
    void SetVeloc(const std::vector<double> &veloc) { veloc_ = veloc; }
    void SetCoord(const std::vector<double> &coord) { coord_ = coord; }
    void SetForce(const std::vector<double> &force) { force_ = force; }
    void SetName(const std::string &name) { name_ = name; }
    void SetMass(const double &mass) { mass_ = mass; }
    void SetCharge(const double &charge) { charge_ = charge; }

    std::vector<double> GetVeloc() { return veloc_; }
    std::vector<double> GetCoord() { return coord_; }
    std::vector<double> GetForce() { return force_; }
    std::string GetName() { return name_; }
    double GetMass() { return mass_; }
    double GetCharge() { return charge_; }

    std::vector<double> veloc_; // 3-D vector: vx, vy, vz, unit: au
    std::vector<double> coord_; // 3-D vector: qx, qy, qz, unit: au
    std::vector<double> force_; // 3-D vector: fx, fy, fz, unit: au
    double mass_;               // unit: au
    double charge_;             // electronic charge, unit: au
    std::string name_;          // e.g. H for hydrogen atom
};
#endif